#pragma once
#include <iostream>                  // for std::cout
#include <utility>                   // for std::pair
#include <algorithm>                 // for std::for_each
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>
#include <set>
#include <algorithm>
#include <vector>
#include <concrt.h>
#include <concurrent_vector.h>
#include <functional>
#include <numeric>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//using namespace boost;
#include <boost/graph/transitive_closure.hpp>
#include <boost/graph/undirected_dfs.hpp>
#include <boost/graph/random.hpp>
#include <boost/random/linear_congruential.hpp>
#include <map>
#include <string>
#include <boost/property_map/property_map.hpp>
#include <fstream>
#include <boost/graph/random_spanning_tree.hpp>
#include <boost/lexical_cast.hpp>
#include <ppl.h>
#include <boost/circular_buffer.hpp>

typedef int my_vertex_t;
typedef std::pair<my_vertex_t,my_vertex_t>  my_edge_t;
typedef boost::adjacency_list< boost::vecS, boost::listS, boost::undirectedS,my_vertex_t, my_edge_t > Graph;
typedef std::map<Graph::vertex_descriptor,my_vertex_t> desc2int_t;
typedef std::map<my_vertex_t,Graph::vertex_descriptor> int2desc_t;

my_edge_t make_edge(my_vertex_t v1,my_vertex_t v2)
{
	return std::minmax(v1,v2);
};

